Day04我們透過Maven構建了專案,相較Day03透過IDE一步一步構建專案,再自己去引入專案相依的Jar檔真的是輕鬆不少,未來皆會以maven的方式並作為日後每日module的起手式。
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
day05 src資料夾右鍵 -> New -> Directory
選取java資料夾
調整web.xml(部署描述檔Deployment Descriptors,簡稱DD檔),由於maven產生的版本比較舊,我們先刪除舊的再透過IDEA重新產生6.0的DD檔
建立6.0的DD檔
edit configurations..
修改Application Context
啟動並訪問MyWebApp
確認無誤後刪除index.jsp
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>com.swj.HandleHelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
</web-app>
day05 java資料夾右鍵 -> New -> class
輸入com.swj.HandleHelloWorldServlet
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
String message = "<h1>Hello World!!!!!~~~</h1>";
res.getWriter().write(message);
}
你會發現我們在day03透過引入tomcat server時會帶上servlet api
或是maven加入servlet api 它的scope都是provided
provided的意思是說只有在編譯、測試會被加到class path,所以在build的時候並不會包含servlet api,為什麼呢?因為當我們部署到tomcat的lib資料夾中就有servlet api的jar檔
content type亦稱作為mime type用來告訴瀏覽器response的檔案類型是什麼,這樣瀏覽器就會按照它設定的行為去處理它
我們在HandleHelloWorldServlet並未設定Content-Type,tomcat也未幫我們設置。我們在Servlet中設定的顯示字串為
String message = "<h1>Hello World!!!!!~~~</h1>";
我們在瀏覽器訪問頁面的時候可以發現response header並未設定Content-Type,但瀏覽器並未出現html標籤,這表示瀏覽器預設的Content-Type就是text/html。
我們在下方設定一下application/json
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
String message = "<h1>Hello World!!!!!~~~</h1>";
res.setContentType("application/json");
res.getWriter().write(message);
}
如果你是訪問靜態資源,例如js、css、imag等,tomcat會根據你請求的資源副檔名會去conf路徑下web.xml文件中找到對應的請求頭設置
<mime-mapping>
<extension>html</extension>
<mime-type>text/html</mime-type>
</mime-mapping>
我們在webapp下創立static目錄放入一張圖片
訪問靜態資源
tomcat所在conf資料夾下web.xml
我們來看一下網址url怎麼一步步訪問到Servlet的
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
<url-pattern>/HelloWorld</url-pattern>
除了使用部署描述檔的設定方式,我們也可以透過Annotation的方式完成servlet的設定,先來創建HandleHelloAnnotationServlet
@WebServlet("/HelloAnnotation")
public class HandleHelloAnnotationServlet implements Servlet {
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
res.getWriter().write("Hello Annotation Servlet");
}
//以下略
}
訪問路徑/HelloAnnotation